// 引入全局mixin
import mixin from './libs/mixin/mixin.js'
// 小程序特有的mixin
import mpMixin from './libs/mixin/mpMixin.js'
// #ifdef MP
import mpShare from './libs/mixin/mpShare.js'
// #endif

// 公共工具函数
import * as index from './libs/function/index.js'
// 防抖方法
import debounce from './libs/function/debounce.js'
// 节流方法
import throttle from './libs/function/throttle.js'
// 规则检验
import * as test from './libs/function/test.js'

// 颜色渐变相关,colorGradient-颜色渐变,hexToRgb-十六进制颜色转rgb颜色,rgbToHex-rgb转十六进制
import * as colorGradient from './libs/function/colorGradient.js'

// 配置信息
import config from './libs/config/config.js'
// 平台
import platform from './libs/function/platform'

const $uv = {
  config,
  test,
  date: index.timeFormat, // 另名date
  ...index,
  colorGradient: colorGradient.colorGradient,
  hexToRgb: colorGradient.hexToRgb,
  rgbToHex: colorGradient.rgbToHex,
  colorToRgba: colorGradient.colorToRgba,
  debounce,
  throttle,
  platform,
  mixin,
  mpMixin
}
uni.$uv = $uv;
const install = (Vue,options={}) => {
  // #ifndef APP-NVUE
  const cloneMixin = index.deepClone(mixin);
  delete cloneMixin?.props?.customClass;
  delete cloneMixin?.props?.customStyle;
  Vue.mixin(cloneMixin);
  // #ifdef MP
  if(options.mpShare){
    Vue.mixin(mpShare);
  }
  // #endif
  // #endif
  // #ifdef VUE2
  // 时间格式化，同时两个名称，date和timeFormat
  Vue.filter('timeFormat', (timestamp, format) => uni.$uv.timeFormat(timestamp, format));
  Vue.filter('date', (timestamp, format) => uni.$uv.timeFormat(timestamp, format));
  // 将多久以前的方法，注入到全局过滤器
  Vue.filter('timeFrom', (timestamp, format) => uni.$uv.timeFrom(timestamp, format));
  // 同时挂载到uni和Vue.prototype中
  // #ifndef APP-NVUE
  // 只有vue，挂载到Vue.prototype才有意义，因为nvue中全局Vue.prototype和Vue.mixin是无效的
  Vue.prototype.$uv = $uv;
  // #endif
  // #endif
  // #ifdef VUE3
  Vue.config.globalProperties.$uv = $uv;
  // #endif
}
export default {
  install
}
